package com.mjf.scala.chapter07

/**
 * 衍生集合
 */
object Scala10_TestFun {
  def main(args: Array[String]): Unit = {

    val list: List[Int] = List(1, 2, 3, 4, 5)
    val list2: List[Int] = List(4, 5, 6, 7, 8)

    // （1）获取集合的头
    println(list.head)    // 1

    // （2）获取集合的尾（不是头的就是尾）
    println(list.tail)    // List(2, 3, 4, 5)

    // （3）集合最后一个数据
    println(list.last)    // 5

    // （4）集合初始数据（不包含最后一个）
    println(list.init)    // List(1, 2, 3, 4)

    // （5）反转
    println(list.reverse)   // List(5, 4, 3, 2, 1)

    // （6）取前（后）n个元素
    println(list.take(3))   // List(1, 2, 3) 前3个
    println(list.takeRight(3))  // List(3, 4, 5) 后3个

    // （7）去掉前（后）n个元素
    println(list.drop(2))   // List(3, 4, 5) 从前面去掉两个元素
    println(list.dropRight(2))  // List(1, 2, 3) 从后面去掉两个元素

    // （8）并集    没去重
    val newList: List[Int] = list.union(list2)
    println(newList)    // List(1, 2, 3, 4, 5, 4, 5, 6, 7, 8)

    // （9）交集
    val newList2: List[Int] = list.intersect(list2)
    println(newList2)   // List(4, 5)

    // （10）差集
    val newList3: List[Int] = list.diff(list2)
    println(newList3)   // List(1, 2, 3)

    // （11）拉链
    println(list.zip(list2))  // List((1,4), (2,5), (3,6), (4,7), (5,8))
    println(list.zip(newList3))   // List((1,1), (2,2), (3,3))  元素个数不同时，多余元素不显示

    // （12）滑窗 窗口大小为3
    list.sliding(3).foreach(println) // List(1, 2, 3) List(2, 3, 4) List(3, 4, 5)
    // 窗口大小为3，步长为2
    list.sliding(3, 2).foreach(println) // List(1, 2, 3) List(3, 4, 5)

  }
}
